package code.class3.easy;

/**
 * https://leetcode.cn/problems/compress-string-lcci/
 * 字符串压缩
 */
public class Code06_compressString {
    public static void main(String[] args) {
        String str = "bb";
        String ans = compressString(str);
        System.out.println("ans = " + ans);
    }

    /**
     * 双指针
     */
    public static String compressString(String str) {
        // 定义双指针
        int l = 0, r = 0;
        StringBuilder ans = new StringBuilder();
        char[] arr = str.toCharArray();
        // r不能越界
        while (r < arr.length) {
            ans.append(arr[l]); // 把当前字符（str.charAt(l)）加入到答案中
            int i = 0; // 用来计数当前字符出现的次数

            // 检查从 l 到 r 的字符是否相同，若相同则继续向右扩展 r
            while (r < arr.length && arr[l] == arr[r]) {
                r++; // 右指针向右移动
                i++;
            }
            l = r; // 更新 l 为 r，跳到下一个不同字符的位置
            ans.append(i);  // 把当前字符的出现次数添加到答案中
        }
        // 如果压缩后的字符串长度大于等于原始字符串，返回原始字符串，否则返回压缩后的字符串
        return ans.length() >= str.length() ? str : ans.toString();
    }
}
